package com.example.demo.mapper;

import com.example.demo.entity.SaleOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 销售订单Mapper接口
 */
@Mapper
@Repository
public interface SaleOrderMapper {
    
    /**
     * 查询指定时间范围的销售订单
     */
    List<SaleOrder> findByDateRange(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
    
    /**
     * 根据收银员ID查询订单
     */
    List<SaleOrder> findByCashierId(@Param("cashierId") Long cashierId);
    
    /**
     * 查询今日销售统计
     */
    Map<String, Object> getTodaySalesStats();
    
    /**
     * 查询月度销售统计
     */
    Map<String, Object> getMonthlySalesStats(@Param("year") Integer year, @Param("month") Integer month);
    
    /**
     * 查询热销商品排行
     */
    List<Map<String, Object>> getTopSellingProducts(@Param("limit") Integer limit);
    
    /**
     * 根据支付方式统计销售
     */
    List<Map<String, Object>> getSalesByPaymentMethod();
    
    /**
     * 查询会员消费统计
     */
    List<Map<String, Object>> getMemberConsumptionStats();
    
    /**
     * 查询销售趋势（按天）
     */
    List<Map<String, Object>> getSalesTrendByDay(@Param("days") Integer days);
    
    /**
     * 查询销售趋势（按小时）
     */
    List<Map<String, Object>> getSalesTrendByHour(@Param("date") String date);
    
    /**
     * 查询退货订单
     */
    List<SaleOrder> findReturnOrders();
    
    /**
     * 统计指定时间段的销售金额
     */
    Double getTotalSalesAmount(@Param("startDate") LocalDateTime startDate, @Param("endDate") LocalDateTime endDate);
}
